import os.path
import sys

#用一个全局列表来存放所有学生信息
students = []

#文件保存信息
def save():
    #将学生信息以utf8的格式保存到名为student.txt的文档中
    with open("students.txt", "w", encoding="utf8") as write_in:
        for stu in students:
            write_in.write(f"{stu['student_id']}\t"
              f"{stu['student_name']}\t"
              f"{stu['student_gender']}\t"
              f"{stu['class_id']}\n")

        print(f"存档成功，共存档了{len(students)}条信息!")

#从文件中读取信息
def load():
    #判断以前是否有创建过文件，如果有，进行读档，若没有，则进行return
    if not os.path.exists("students.txt"):
        return
    #保证旧文件为空
    global students
    students = []
    # 将学生信息以utf8的格式从文件中读取出来
    with open("students.txt", "r", encoding="utf8") as read_in:
        for line in read_in:
            #去掉首尾的空白符
            line = line.strip()
            #切割字符串
            string = line.split("\t")
            #确保读档时，被读档的文件格式正确，若有格式不对的行，则显示出来
            if len(string) != 4:
                print(f"line = {len(line)} 这一行格式存在问题 ")
                #格式有问题，这一行就不要读了，直接看下一行
                continue
            #将这一个学生成绩存入字典
            student = {
                "student_id": string[0],
                "student_name": string[1],
                "student_gender": string[2],
                "class_id": string[3]
            }
            #将这个学生成绩存入学生列表
            students.append(student)

        print(f"读档成功，共读取了{len(students)}个学生数据!")


# 增加学生信息
def add():
    print("[新增学生开始]")
    student_id = input("请输入学号:")
    student_name = input("请输入学生姓名:")
    student_gender = input("请输入学生性别:")
    if student_gender not in("男", "女"):
        print("输入非法，请输入男或者女!")
    class_id = input("请输入学生班级:")
    #用一个字典创建学生信息
    student = {
        "student_id": student_id,
        "student_name": student_name,
        "student_gender": student_gender,
        "class_id": class_id
    }
    #声明使用全局变量
    global students
    #增加学生信息到学生列表里面
    students.append(student)
    print("[增加学生结束]")
    #文件保存
    save()

# 删除学生信息
def delete():
    print("[删除学生开始]")
    delete_name = input("请输入您要删除的学生姓名:")
    #遍历表格内容找到该学生
    for stu in students:
        if stu['student_name'] == delete_name:
            #找到该学生后删除
            students.remove(stu)
            print("[删除学生结束]")
            # 文件保存
            save()
            return
    print("未能找到该学生!")


#展示所有学生信息
def show():
    print("[展示学生信息开始]")
    for stu in students:
        print(f"学号:[{stu['student_id']}]\t"
              f"姓名:[{stu['student_name']}]\t"
              f"性别:[{stu['student_gender']}]\t"
              f"班级:[{stu['class_id']}]\t")
    print("[展示学生信息结束]")
    print(f"一共展示了{len(students)}条学生信息")


#查找学生信息
def fund():
    print("[查找学生开始]")
    fund_name = input("请输入您要查找的学生姓名:")
    #遍历学生列表查找
    for stu in students:
        if stu['student_name'] == fund_name:
            print(f"学号:[{stu['student_id']}]\t"
                  f"姓名:[{stu['student_name']}]\t"
                  f"性别:[{stu['student_gender']}]\t"
                  f"班级:[{stu['class_id']}]\t")
            print("[查找学生结束]")
            return
    print("查找不到该学生信息!")

#菜单
def menu():
    print("1.增加学生信息")
    print("2.删除学生信息")
    print("3.展示学生信息")
    print("4.查找学生信息")
    print("0.退出系统")
    choose = input("请输入:")
    return choose
def main():

    print("+------------------------------------+")
    print("|           欢迎来到学生管理系统         |")
    print("+------------------------------------+")
    #先进行读档操作,读取上一次创建的学生信息
    load()
    while True:
        choose = menu()
        #增加学生信息
        if choose == '1':
            add()
        #删除学生信息
        elif choose == '2':
            delete()
        #查找学生信息
        elif choose == '3':
            show()
        #查找学生信息
        elif choose == '4':
            fund()
        #退出系统
        elif choose == '0':
            print("goodbye~")
            sys.exit(0)
        #输入非法
        else :
            print("输入非法，请重新输入!")

main()